(defmacro dl-traversal(x dl f-test  f-proc  f-noproc  f-res)
  `(let ((r-list nil)(bak-list nil))
    (labels ((dl-travel(,x ,dl)
	       (if (null ,dl)
		   nil
		   (if (dl-p (dl-data ,dl))
		       (progn (dl-travel ,x (dl-data ,dl))
			      (dl-travel ,x (dl-next ,dl)))
		       (progn (if ,f-test
				  ,f-proc
				  ,f-noproc)
			      (dl-travel ,x (dl-next ,dl)))))))
      (dl-travel ,x ,dl))
   ,f-res))
(defmacro my-search(x dl)
  `(dl-traversal ,x ,dl (eql ,x (dl-data ,dl)) (push  ,dl r-list) nil (car r-list)))
(defmacro my-element(x dl)
  `(dl-traversal ,x ,dl (dl-p (dl-data ,dl)) nil (push (dl-data ,dl) r-list) (length r-list)))
